package common;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


import kau.dao.AttendInfoDAOImpl;
import kau.vo.AttendInfo;

public class DateUtil {
	private static final int kk[] = { 1, 2, 1, 2, 1, 2, 2, 3, 2, 2, 1, 2, 1, 1,
			2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 0, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2,
			1, 2, 0, 2, 1, 1, 2, 1, 3, 2, 1, 2, 2, 1, 2, 2, 2, 1, 1, 2, 1, 1,
			2, 1, 2, 1, 2, 2, 0, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 0, 2, 2,
			1, 2, 3, 2, 1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2,
			1, 0, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 1, 2, 3, 2, 1, 2, 2,
			1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 0, 1, 1, 2,
			1, 1, 2, 3, 2, 2, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2,
			0, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 0, 2, 1, 2, 1, 2, 3, 1, 2,
			1, 2, 1, 2, 1, 2, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 0, 1, 2, 2, 1,
			2, 1, 2, 1, 2, 1, 2, 1, 0, 2, 1, 2, 3, 2, 2, 1, 2, 1, 2, 1, 2, 1,
			2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 0, 1, 2, 1, 1, 2, 1, 2, 2, 3,
			2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 0, 2, 1, 2, 1, 1,
			2, 1, 2, 1, 2, 2, 2, 0, 1, 2, 1, 2, 1, 3, 2, 1, 1, 2, 2, 1, 2, 2,
			2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 0, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2,
			1, 2, 0, 1, 2, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
			2, 1, 2, 1, 2, 1, 0, 2, 1, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 0, 1, 2,
			3, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2,
			1, 0, 2, 1, 2, 1, 1, 2, 3, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 2, 1,
			1, 2, 2, 1, 2, 0, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 0, 2, 2, 1,
			2, 2, 3, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2,
			0, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 0, 2, 1, 3, 2, 1, 2, 2, 1,
			2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2, 0, 1, 2, 1, 1,
			2, 1, 2, 3, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 0,
			2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 0, 2, 1, 2, 2, 1, 3, 2, 1, 1,
			2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 0, 2, 1, 2, 1, 2,
			2, 1, 2, 1, 2, 1, 1, 0, 2, 1, 2, 2, 3, 2, 1, 2, 2, 1, 2, 1, 2, 1,
			1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1, 0, 2, 1, 1, 2, 1, 2, 1, 2, 2, 1,
			2, 2, 0, 1, 2, 3, 1, 2, 1, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 2, 1,
			1, 2, 1, 2, 2, 2, 0, 1, 2, 2, 1, 1, 2, 3, 1, 2, 1, 2, 2, 1, 2, 2,
			2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 0, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1,
			2, 0, 1, 2, 2, 1, 2, 4, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 1, 2,
			2, 1, 2, 1, 2, 0, 1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1, 0, 2, 1, 1,
			4, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1,
			0, 2, 2, 1, 1, 2, 1, 1, 4, 1, 2, 2, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2,
			1, 2, 1, 2, 0, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 0, 2, 2, 1, 2,
			2, 1, 4, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 0,
			1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1, 2, 0, 1, 1, 2, 1, 4, 1, 2, 1, 2,
			2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1, 2, 0, 2, 1, 1, 2, 1,
			1, 2, 1, 2, 2, 1, 2, 0, 2, 2, 3, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2,
			1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 0, 2, 2, 1, 2, 1, 2, 1, 3, 2, 1,
			2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 0, 2, 1, 2, 2, 1, 2,
			1, 2, 1, 2, 1, 2, 0, 1, 2, 1, 2, 1, 4, 2, 1, 2, 1, 2, 1, 2, 1, 2,
			1, 1, 2, 2, 1, 2, 2, 1, 2, 2, 0, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2,
			2, 0, 2, 1, 1, 4, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2,
			1, 2, 1, 2, 2, 0, 2, 1, 2, 1, 2, 1, 1, 2, 3, 2, 1, 2, 2, 1, 2, 2,
			1, 2, 1, 1, 2, 1, 2, 1, 2, 0, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
			0, 2, 1, 2, 1, 2, 2, 3, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2,
			1, 2, 1, 2, 0, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 0, 2, 1, 2, 1,
			3, 2, 1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 0,
			1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 0, 2, 2, 2, 3, 2, 1, 1, 2, 1,
			1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 0, 1, 2, 2, 1, 2,
			1, 2, 3, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 0, 2,
			1, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 0, 1, 2, 1, 1, 2, 3, 2, 1, 2, 2,
			2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 0, 2, 1, 2, 1, 1, 2,
			1, 1, 2, 2, 2, 1, 0, 2, 2, 1, 2, 3, 1, 2, 1, 1, 2, 2, 1, 2, 2, 2,
			1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 0, 2, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1,
			1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 0, 2, 2, 1, 2, 1, 2, 2,
			1, 2, 1, 2, 1, 0, 2, 1, 1, 2, 1, 2, 4, 1, 2, 2, 1, 2, 1, 2, 1, 1,
			2, 1, 2, 1, 2, 2, 1, 2, 2, 0, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2,
			0, 2, 1, 2, 1, 3, 2, 1, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 2, 1, 1,
			2, 1, 2, 2, 0, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 3, 2, 2, 1, 2, 2, 1,
			2, 1, 2, 1, 1, 2, 1, 2, 0, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 1, 0,
			2, 1, 2, 2, 1, 2, 3, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 1,
			2, 2, 1, 0, 2, 1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 0, 1, 2, 1, 1, 2,
			3, 1, 2, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2, 0, 1,
			2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 0, 1, 2, 2, 3, 2, 1, 2, 1, 1, 2,
			1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 0, 1, 2, 2, 1, 2, 2,
			1, 2, 3, 2, 1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 0, 1, 1,
			2, 1, 2, 1, 2, 2, 1, 2, 2, 1, 0, 2, 1, 1, 2, 1, 3, 2, 2, 1, 2, 2,
			2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1, 0, 2, 2, 1, 1, 2, 1, 1,
			2, 1, 2, 2, 1, 0, 2, 2, 2, 1, 3, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1,
			2, 1, 2, 1, 1, 2, 1, 2, 1, 0, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2,
			0, 1, 2, 3, 2, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1,
			2, 2, 1, 2, 0, 1, 1, 2, 1, 2, 1, 2, 3, 2, 2, 1, 2, 2, 1, 1, 2, 1,
			1, 2, 1, 2, 2, 2, 1, 2, 0, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 0,
			2, 2, 1, 1, 2, 3, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1,
			2, 1, 2, 0, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 0, 2, 1, 2, 4, 2,
			1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 1,
			2, 1, 2, 1, 2, 1, 2, 2, 3, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1,
			2, 2, 0, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 0, 2, 1, 1, 2, 1, 3,
			2, 1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 0, 2, 1,
			2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 0, 2, 1, 2, 2, 3, 2, 1, 1, 2, 1, 2,
			1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 2, 1, 2, 1, 2, 2, 1,
			2, 1, 2, 1, 2, 0, 1, 2, 3, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1,
			1, 2, 1, 2, 2, 1, 2, 2, 1, 0, 2, 1, 2, 1, 1, 2, 3, 2, 1, 2, 2, 2,
			1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 0, 1, 2, 1, 2, 1, 1, 2, 1,
			1, 2, 2, 2, 0, 1, 2, 2, 1, 2, 3, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2,
			2, 1, 1, 2, 1, 1, 2, 2, 0, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 0,
			2, 1, 2, 3, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2,
			2, 1, 2, 0, 1, 2, 1, 1, 2, 1, 2, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2,
			1, 2, 1, 2, 2, 2, 1, 0, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 0, 2,
			2, 1, 2, 1, 1, 4, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2,
			1, 2, 0, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 0, 2, 2, 1, 2, 2, 3,
			2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 0, 2, 1,
			1, 2, 1, 2, 2, 1, 2, 2, 1, 2, 0, 1, 2, 3, 1, 2, 1, 2, 1, 2, 2, 2,
			1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 0 };
	private final static String yuk[] = { "갑", "을", "병", "정", "무", "기", "경",
			"신", "임", "계" };
	private final static String gap[] = { "자", "축", "인", "묘", "진", "사", "오",
			"미", "신", "유", "술", "해" };
	private final static String ddi[] = { "쥐띠", "소띠", "범띠", "토끼띠", "용띠", "뱀띠",
			"말띠", "양띠", "잔나비띠", "닭띠", "개띠", "돼지띠" };
	private final static String week[] = { "일요일", "월요일", "화요일", "수요일", "목요일",
			"금요일", "토요일" };

	private static final int m[] = { 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30,
			31 };

	private static Date init_date;

	private static final String errMsg = "입력값 에러";

	/**
	 * 음력을 약력으로
	 * 
	 * @param String
	 *            음력일('yyyyMMdd')
	 * @param boolean 윤달 여부
	 * @return String 처리결과 양력일 엔티티
	 * @throws java.lang.Exception
	 */
	public static String LunarTranse(String TranseDay, boolean leapyes)
			throws Exception {
		int dt[] = new int[163];
		int lyear = Integer.parseInt(TranseDay.substring(0, 4));
		int lmonth = Integer.parseInt(TranseDay.substring(4, 6));
		int lday = Integer.parseInt(TranseDay.substring(6, 8));

		if (!leapyes && !verifyDate(lyear, lmonth, lday, "solar-")) {
			return "";
		}
		if (leapyes && !verifyDate(lyear, lmonth, lday, "solar+")) {
			return "";

		}
		int m1 = -1;
		long td = 0L;
		if (lyear != 1881) {
			m1 = lyear - 1882;
			for (int i = 0; i <= m1; i++) {
				for (int j = 0; j < 13; j++)
					td = td + (long) kk[i * 13 + j];

				if (kk[i * 13 + 12] == 0)
					td = td + 336L;
				else
					td = td + 362L;
			}

		}
		m1++;
		int n2 = lmonth - 1;
		int m2 = -1;
		do {
			m2++;
			if (kk[m1 * 13 + m2] > 2) {
				td = td + 26L + (long) kk[m1 * 13 + m2];
				n2++;
				continue;
			}
			if (m2 == n2)
				break;
			td = td + 28L + (long) kk[m1 * 13 + m2];
		} while (true);
		if (leapyes)
			td = td + 28L + (long) kk[m1 * 13 + m2];
		td = td + (long) lday + 29L;
		m1 = 1880;
		do {
			m1++;
			boolean leap = m1 % 400 == 0 || m1 % 100 != 0 && m1 % 4 == 0;
			if (leap)
				m2 = 366;
			else
				m2 = 365;
			if (td < (long) m2)
				break;
			td = td - (long) m2;
		} while (true);
		int syear = m1;
		m[1] = m2 - 337;
		m1 = 0;
		do {
			m1++;
			if (td <= (long) m[m1 - 1])
				break;
			td = td - (long) m[m1 - 1];
		} while (true);
		int smonth = m1;
		int sday = (int) td;
		long y = (long) syear - 1L;
		td = ((y * 365L + y / 4L) - y / 100L) + y / 400L;
		boolean leap = syear % 400 == 0 || syear % 100 != 0 && syear % 4 == 0;
		if (leap)
			m[1] = 29;
		else
			m[1] = 28;
		for (int i = 0; i < smonth - 1; i++)
			td = td + (long) m[i];

		td = td + (long) sday;
		int w = (int) (td % 7L);
		int i = (int) (td % 10L);
		i = (i + 4) % 10;
		int j = (int) (td % 12L);
		j = (j + 2) % 12;
		int k1 = (lyear + 6) % 10;
		int k2 = (lyear + 8) % 12;

		String sValue = String.valueOf(syear);

		if (smonth < 10)
			sValue += "0";
		sValue += String.valueOf(smonth);
		if (sday < 10)
			sValue += "0";
		sValue += String.valueOf(sday);

		return sValue;
	}

	/**
	 * 양력을 음력으로
	 * 
	 * @param String
	 *            양력일('yyyyMMdd')
	 * @return String 처리결과 음력일
	 * @throws java.lang.Exception
	 */
	public static String solarTranse(String TranseDay) throws Exception {
		int dt[] = new int[163];
		for (int i = 0; i < 163; i++) {
			dt[i] = 0;
			for (int j = 0; j < 12; j++)
				switch (kk[i * 13 + j]) {
				case 1: // '\001'
				case 3: // '\003'
					dt[i] = dt[i] + 29;
					break;

				case 2: // '\002'
				case 4: // '\004'
					dt[i] = dt[i] + 30;
					break;
				}

			switch (kk[i * 13 + 12])

			{
			case 1: // '\001'
			case 3: // '\003'
				dt[i] = dt[i] + 29;
				break;

			case 2: // '\002'
			case 4: // '\004'
				dt[i] = dt[i] + 30;
				break;
			}
		}

		int syear = Integer.parseInt(TranseDay.substring(0, 4));
		int smonth = Integer.parseInt(TranseDay.substring(4, 6));
		int sday = Integer.parseInt(TranseDay.substring(6, 8));
		if (!verifyDate(syear, smonth, sday, "lunar")) {
			throw new Exception("입력값 에러");

		}
		long k11 = syear - 1;
		long td2 = ((k11 * 365L + k11 / 4L) - k11 / 100L) + k11 / 400L;
		boolean ll = syear % 400 == 0 || syear % 100 != 0 && syear % 4 == 0;
		if (ll)
			m[1] = 29;
		else
			m[1] = 28;
		for (int i = 0; i < smonth - 1; i++)
			td2 = td2 + (long) m[i];

		td2 = td2 + (long) sday;

		long td = (td2 - 0xa7a5eL) + 1L;
		long td0 = dt[0];
		int i = 0;
		for (i = 0; i < 163; i++) {
			if (td <= td0)
				break;
			td0 = td0 + (long) dt[i + 1];
		}

		int lyear = i + 1881;
		td0 = td0 - (long) dt[i];
		td = td - td0;
		int jcount = 0;
		if (kk[i * 13 + 12] != 0)
			jcount = 13;
		else
			jcount = 12;
		int m2 = 0;
		int j = 0;
		int m1;
		for (j = 0; j < jcount; j++) {
			if (kk[i * 13 + j] <= 2)
				m2++;
			if (kk[i * 13 + j] <= 2)
				m1 = kk[i * 13 + j] + 28;
			else
				m1 = kk[i * 13 + j] + 26;
			if (td <= (long) m1)
				break;
			td = td - (long) m1;
		}

		int m0 = j;
		long lmonth = m2;
		int lday = (int) td;
		int w = (int) (td2 % 7L);
		i = (int) ((td2 + 4L) % 10L);
		j = (int) ((td2 + 2L) % 12L);
		int i1 = (lyear + 6) % 10;
		int j1 = (lyear + 8) % 12;
		String sValue = String.valueOf(lyear);

		if (lmonth < 10)
			sValue += "0";
		sValue += String.valueOf(lmonth);
		if (lday < 10)
			sValue += "0";
		sValue += String.valueOf(lday);

		return sValue;
	}

	private static boolean verifyDate(int k, int l, int l1, String s) {
		if (k < 1881 || k > 2043 || l < 1 || l > 12)
			return false;
		if (s.equals("lunar") && l1 > m[l - 1])
			return false;
		if (s.equals("solar+")) {
			if (kk[(k - 1881) * 13 + 12] < 1)
				return false;
			if (kk[(k - 1881) * 13 + l] < 3)
				return false;
			if (kk[(k - 1881) * 13 + l] + 26 < l1)
				return false;
		}
		if (s.equals("solar-")) {
			int j = l - 1;
			for (int i = 1; i <= 12; i++)
				if (kk[((k - 1881) * 13 + i) - 1] > 2)
					j++;

			if (l1 > kk[(k - 1881) * 13 + j] + 28)
				return false;
		}
		return true;
	}

	// 토요일 또는 일요일을 구한다.
	// 인수로 받은 날짜가 토요일 또는 일요일이면 false를 리턴해준다.
	// 인수는 20041010형식으로 받는다.
	public static boolean weekCheck(String date) {
		SimpleDateFormat original_format = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat new_format = new SimpleDateFormat("yyyyMMdd");

		try {
			Date rDate1 = original_format.parse(date);
			date = new_format.format(rDate1);
		} catch (ParseException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		boolean flag = true;

		try {
			Calendar calendar = Calendar.getInstance();

			// String으로 받은 값을 int형으로 형변환해서 년, 월, 일로 넣어준다.
			// 월은 -1을 해준다.
			calendar.set(Integer.parseInt(date.substring(0, 4)),
					Integer.parseInt(date.substring(4, 6)) - 1,
					Integer.parseInt(date.substring(6, 8)));

			// 위에서 넣어준 날짜가 토요일 또는 일요일이라면 변수 flag는 false값을 가지고 리턴된다.
			if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY
					|| calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
				flag = false;
			}
		} catch (Exception e) {
			System.out.println("weekCheck() : " + e);
		}

		return flag;
	}

	// 양력 법정공휴일을 구한다.
	// 인수로 받은 날짜가 법정공휴일이면 false를 리턴해준다.
	// 인수는 20041010형식으로 받는다.
	public static boolean holidayCheck(String date) {

		SimpleDateFormat original_format = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat new_format = new SimpleDateFormat("yyyyMMdd");

		try {
			Date rDate1 = original_format.parse(date);
			date = new_format.format(rDate1);
		} catch (ParseException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		boolean flag = true;

		try {
			Calendar calendar = Calendar.getInstance();

			// 양력법정공휴일을 20041010형식으로 String 배열에 넣는다.
			String[] arrayDate = { date.substring(0, 4) + "0101",
					date.substring(0, 4) + "0301",
					date.substring(0, 4) + "0405",
					date.substring(0, 4) + "0505",
					date.substring(0, 4) + "0606",
					date.substring(0, 4) + "0815",
					date.substring(0, 4) + "1003",
					date.substring(0, 4) + "1225" };

			// 입력받은 날짜와 배열에 들어있는 날짜가 같으면 flag는 false값을 가진다.
			for (int i = 0; i < arrayDate.length; i++) {
				if (date.equals(arrayDate[i])) {
					flag = false;
					break;
				}
			}
		} catch (Exception e) {
			System.out.println("holidayCheck() : " + e);
		}

		return flag;
	}

	// 음력 법정공휴일을 구한다.
	// 인수로 받은 날짜가 법정공휴일이면 false를 리턴해준다.
	// 인수는 20041010형식으로 양력날짜를 받는다.
	public static boolean lunarCheck(String date) {
		boolean flag = true;

		try {
			Calendar calendar = Calendar.getInstance();

			// 음력 법정공휴일을 String 배열에 모두 넣어둔다.
			// 배열값은 모두 음력일이다.
			// 설, 설, 부처님오신날, 추석, 추석, 추석
			String[] lunarHoliday = { date.substring(0, 4) + "0101",
					date.substring(0, 4) + "0102",
					date.substring(0, 4) + "0408",
					date.substring(0, 4) + "0814",
					date.substring(0, 4) + "0815",
					date.substring(0, 4) + "0816" };

			// String형 날짜를 Date형으로 넣어준다.
			// 인수로 받은 날짜에 +1을 더한 날을 구한다.
			// 음력 1월1일 하루전날이 음력 12월 29일인지 12월 30일인지 구할방법을 못찾아서 이방법을 사용했다.
			SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
			Date d = format.parse(date);
			calendar.setTime(d);
			calendar.add(Calendar.DATE, +1);
			Date happyNewYearFirstDay = calendar.getTime();

			// 인수로 받은 날짜에 +1을 더한 날을 solarTranse() 메소드의 인수로 넣으면
			// 음력일을 리턴해준다.
			// 리턴받은 음력일이 1월 1일이면 휴일이므로 flag는 false값을 가지고 리턴된다.
			if (DateUtil.solarTranse(format.format(happyNewYearFirstDay))
					.equals(lunarHoliday[0])) {
				flag = false;
				return flag;
			}

			// 입력받은 날짜의 음력일과 배열에 들어있는 날짜가 같으면 flag는 false값을 가진다.
			for (int i = 0; i < lunarHoliday.length; i++) {
				if (lunarHoliday[i].equals(DateUtil.solarTranse(date))) {
					flag = false;
					break;
				}
			}
		} catch (Exception e) {
			System.out.println("lunarCheck() : " + e);
		}

		return flag;
	}

	// 인수로 받은 날짜를 가지고 위에 있는 세개의 메소드를 호출해서
	// boolean값을 리턴해준다.
	public static boolean returnBoolean(String date) {

		boolean flag = false;

		if (weekCheck(date) == true && holidayCheck(date) == true
				&& lunarCheck(date) == true) {
			flag = true;
		}

		return flag;
	}

	public static String getTime(String Date) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date rdate = null;
		try {
			rdate = format.parse(Date);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		java.text.SimpleDateFormat format1 = new java.text.SimpleDateFormat(
				"HH:mm");
		String dateString = format1.format(rdate);

		return dateString;
	}
	public static String getTimeNotsemi(String date){
		SimpleDateFormat format = new SimpleDateFormat("HH:mm");
		Date rdate = null;
		try {
			rdate = format.parse(date);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		java.text.SimpleDateFormat format1 = new java.text.SimpleDateFormat(
				"HHmm");
		String dateString = format1.format(rdate);
		
		return dateString;
	}

	public static String getDate(String Date) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date rdate = null;
		try {
			rdate = format.parse(Date);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		java.text.SimpleDateFormat format1 = new java.text.SimpleDateFormat(
				"YYYY-MM-dd");
		String dateString = format1.format(rdate);

		return dateString;
	}

	public static int getDayCount(String startDate, String endDate) {

		int dayCount = 0;

		try {

			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			Date rDate1 = format.parse(endDate);
			Date rDate2 = format.parse(startDate);
			dayCount = (int) ((rDate1.getTime() - rDate2.getTime()) / (1000 * 60 * 60 * 24));

			// System.out.println(dayCount);

		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return dayCount + 1;

	}

	public static String getNextDay(String date) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Date nextDate;
		try {
			Date rDate = format.parse(date);
			nextDate = new Date(rDate.getTime() + (long) (1000 * 60 * 60 * 24));
			date = format.format(nextDate);
		} catch (ParseException e) {
			// TODO Auto-generated catch block

		}

		return date;
	}

	public static int getWeekCount(String startDate, String endDate) {
		int weekCount = 0;
		int dayCount = getDayCount(startDate, endDate);
		System.out.println("dayCount "+dayCount);
		
		String countDate=null;

		for (int i = 0; i < dayCount; i++) {
			countDate= startDate;
			
			SimpleDateFormat original_format = new SimpleDateFormat(
					"yyyy-MM-dd");
			SimpleDateFormat new_format = new SimpleDateFormat("yyyyMMdd");

			try {
				Date rDate1 = original_format.parse(countDate);
				countDate = new_format.format(rDate1);
			} catch (ParseException e1) {
				// TODO Auto-generated catch block
				
			}

			try {
				Calendar calendar = Calendar.getInstance();

				// String으로 받은 값을 int형으로 형변환해서 년, 월, 일로 넣어준다.
				// 월은 -1을 해준다.
				calendar.set(Integer.parseInt(countDate.substring(0, 4)),
						Integer.parseInt(countDate.substring(4, 6)) - 1,
						Integer.parseInt(countDate.substring(6, 8)));

				// 위에서 넣어준 날짜가 토요일 또는 일요일이라면 변수 flag는 false값을 가지고 리턴된다.
				if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
					weekCount++;
				}
			} catch (Exception e) {
				System.out.println("weekCheck() : " + e);
			}
			
			startDate=getNextDay(startDate);
			
		}
		
		
		SimpleDateFormat original_format = new SimpleDateFormat(
				"yyyy-MM-dd");
		SimpleDateFormat new_format = new SimpleDateFormat("yyyyMMdd");

		try {
			Date rDate1 = original_format.parse(endDate);
			endDate = new_format.format(rDate1);
		} catch (ParseException e1) {
			// TODO Auto-generated catch block
			
		}

		try {
			Calendar calendar = Calendar.getInstance();

			// String으로 받은 값을 int형으로 형변환해서 년, 월, 일로 넣어준다.
			// 월은 -1을 해준다.
			calendar.set(Integer.parseInt(endDate.substring(0, 4)),
					Integer.parseInt(endDate.substring(4, 6)) - 1,
					Integer.parseInt(endDate.substring(6, 8)));

			// 위에서 넣어준 날짜가 토요일 또는 일요일이라면 변수 flag는 false값을 가지고 리턴된다.
			if (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
				weekCount++;
			}
		}
		catch (Exception e) {
				System.out.println("weekCheck() : " + e);
		}

		return weekCount;
	
		
	}

	public static String getToday(){
		String today = null;
		Date todayDate=new Date();
		SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
		today=format.format(todayDate);
			
		return today;
	}
	
	public static String getNowTime(){
		String nowTime=null;
		Date dNowTime=new Date();
		SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
		nowTime=timeFormat.format(dNowTime);
		
		return nowTime;
	}
	
	public static int getWeekHours(String startTime,String endTime){

		Date d1=null;
		Date d2=null;
		
		SimpleDateFormat fm=new SimpleDateFormat("HH:mm");
		try {
			d1=fm.parse(startTime);
			d2=fm.parse(endTime);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		int time1=d1.getHours()*60+d1.getMinutes();
		int time2=d2.getHours()*60+d2.getMinutes();
		
		
		int weekHours=(time2-time1)*5/60;
		
		
		

		return weekHours;
				
	}
	
	public static int getNotHolidayDayCount(String startDate,String endDate){
		int dayCount = 0;
		int realCount=0;
		
		try {

			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			Date rDate1 = format.parse(endDate);
			Date rDate2 = format.parse(startDate);
			dayCount = (int) ((rDate1.getTime() - rDate2.getTime()) / (1000 * 60 * 60 * 24));

			// System.out.println(dayCount);

		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
		
		
		
		
		 dayCount ++;

		 
		 
			for (int i = 0; i < dayCount; i++) {

				if (!DateUtil.returnBoolean(startDate)) {
					startDate = DateUtil.getNextDay(startDate);
					continue;
				}
				realCount++;
				startDate = DateUtil.getNextDay(startDate);
			}
		 
		 return  realCount;
		
	}
}
